import org.junit.Test;

import java.io.*;
import java.util.*;

public class Test3 {
    int i;

    @Test
    public void test3() {
        Map<Integer, String> hashmap = new HashMap<>();
        hashmap.put(101, "p1");
        hashmap.put(102, "p2");
        hashmap.put(103, "p3");
        hashmap.put(104, "p4");
        hashmap.put(105, "p5");
        Collection<String> values = hashmap.values();
        System.out.println(values);
    }

    @Test
    public void Hashmap_iterator1() {
        Map<Integer, String> hashmap = new HashMap<>();//创建hashmap集合
        hashmap.put(101, "p1");
        hashmap.put(102, "p2");
        hashmap.put(103, "p3");
        hashmap.put(104, "p4");
        hashmap.put(105, "p5");
        Set<Integer> keyset = hashmap.keySet();//调用hashmap集合的keyset方法创建一个set集合
        Iterator<Integer> it = keyset.iterator();//创建keyset集合的迭代器
        while (it.hasNext()) {
            Integer key = it.next();//获得key值
            String value = hashmap.get(key);//获得value值
            System.out.println("key=" + key + " " + "value=" + value);
        }
    }

    @Test
    public void Hashmap_iterator2() {
        Map<Integer, String> hashmap = new HashMap<>();
        hashmap.put(1001, "p1");
        hashmap.put(1002, "p2");
        hashmap.put(1003, "p3");
        hashmap.put(1004, "p4");
        Set<Map.Entry<Integer, String>> entryset = hashmap.entrySet();
        Iterator<Map.Entry<Integer, String>> it = entryset.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }

    public static void main(String[] args) {
        System.out.println("请输入一行字符串：");
        String input = new Scanner(System.in).nextLine();
        Map<Character, Integer> map = new HashMap<>();
        Integer x=map.get('s');
        System.out.println(x);
        for (int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            Integer values = map.get(c);
            //每次循环获得一个字符，如果调用hashmap的get(key)方法，得到的value是null，就表示hashmap集合中还没存入该字符，以及字符对应的value值
            //注明：c是hashmap集合中的key，values是hashmap集合中的value
            if(values==null){
                map.put(c,1);
            }
            else{
                map.put(c,values+1);
            }
        }
        System.out.println("统计后的结果如下：");
        System.out.println(map);
    }

    @Test
    public void TestSet() {
        Set<String> hashset1 = new HashSet<>();//创建第一个集合
        Set<String> hashset2 = new HashSet<>();//创建第二个集合
        Set<String> hashset3 = new HashSet<>();//创建第三个集合
        hashset1.add("h1");
        hashset1.add("h2");
        hashset1.add("h3");
        hashset1.add("h4");
        hashset2.add("h2");
        hashset2.add("h5");
        hashset3.add("h1");
        //向set集合添加元素
        System.out.println(hashset1.contains("h2"));//如果Set集合中包含指定的元素，返回true
        System.out.println(hashset1.equals("h1"));//判断Set集合和该指定对象是否相等，相等返回true，判断的是整个集合，而不是某一个元素
        System.out.println(hashset1.hashCode());//返回该Set集合的hashcode值
        System.out.println(hashset1.isEmpty());//判断该集合是否为空，为空则返回true
        System.out.println(hashset1.remove("h3"));//如果集合中有该指定元素，则将其移除，移除成功返回true
        System.out.println(hashset1.size());//返回该集合的容量(元素数)
        System.out.println(Arrays.toString(hashset1.toArray()));//将集合转换为数组
        hashset1.addAll(hashset2);//将指定Set集合的所有元素添加到该Set集合中，添加成功返回true
        System.out.println(hashset1);//打印添加后的集合
        System.out.println(hashset1.containsAll(hashset2));//如果Set集合包含指定Set集合的所有元素，则返回true
        hashset1.removeAll(hashset2);//移除Set集合中包含的指定Set集合中的元素，相当于移除掉两个Set集合的交集元素
        System.out.println(hashset1);//打印移除后的集合
        hashset1.retainAll(hashset3);//仅保留Set集合中包含在指定Set集合中的元素，相当于仅保留两个Set集合的交集元素
        System.out.println(hashset1);//打印保留后的集合
        hashset1.retainAll(hashset2);//仅保留Set集合中包含在指定Set集合中的元素，当两个Set集合的交集为空集时，打印的Set集合为空集合:[]
        System.out.println(hashset1);//打印保留后的集合,结果为[]
    }
}
